package com.liliudong.template.common.entity.sys;

import com.liliudong.template.common.entity.BaseEntity;
import com.mybatisflex.annotation.EnumValue;
import com.mybatisflex.annotation.Table;
import lombok.*;
import lombok.experimental.FieldNameConstants;

import java.io.Serializable;

/**
 * 系统菜单 实体类。
 *
 * @author liudo
 * @since 2024-07-30
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Table("sys_menu")
public class SysMenu extends BaseEntity implements Serializable {
    /**
     * 父级ID
     */
    private Long parentId;

    /**
     * 名称
     */
    private String name;

    /**
     * 类型 1 目录 2菜单 3按钮
     */
    private Type type;

    /**
     * 图标
     */
    private String icon;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 组件路径 相对路径是 views
     */
    private String component;

    /**
     * 权限标识符
     */
    private String permission;

    /**
     * 可见的 1可见 0隐藏
     */
    private Visible visible;

    /**
     * 类型 1 目录 2菜单 3按钮
     *
     * @author ldli5
     * @classname SysMenuTypeEnum
     * @date 2024/6/20-17:00
     */
    @Getter
    public enum Type {

        /**
         * 目录
         */
        CATALOG(1, "目录"),

        /**
         * 菜单
         */
        MENU(2, "菜单"),

        /**
         * 按钮
         */
        BUTTON(3, "按钮");

        @EnumValue
        private final Integer value;
        private final String desc;

        Type(Integer value, String desc) {
            this.value = value;
            this.desc = desc;
        }

    }

    /**
     * 可见的 1可见 0隐藏
     * @author ldli5
     * @classname SysMenuVisiableEnum
     * @date 2024/6/20-17:01
     */
    @Getter
    public enum Visible {

        /**
         * 可见
         */
        VISIBLE(1, "可见"),

        /**
         * 隐藏
         */
        HIDDEN(0, "隐藏");

        @EnumValue
        private final Integer value;
        private final String desc;

        Visible(Integer value, String desc) {
            this.value = value;
            this.desc = desc;
        }

    }

}
